public class polymorphic_duotai {
    public static void fun1(Animal1 a){

    }

    public static Animal1 fun2(){
        Dog1 dog=new Dog1("小黑",3);
        return dog;
    }

    public static void main(String[] args) {

        //当此时这个animal引用，引用的对象不一样时，调用同一个方法，表现的形式却不一样
        //我们就把这种过程称为多态
        //即同一个父类，对不同的子类进行向上转型，
        //调用同一个父类中被重写的方法，表现出不一样的形式
        Animal1 animal=new Dog1("旺财",1);
        fun1(animal);
        Animal1 animal1=new Bird("小鸟",2);
        fun1(animal1);
        //以上述代码为例，同一个父类animal，分别对Dog类和Bird类进行向上转型
        //调用同一个被被重写的方法eat，表现出的形式分别为不同的 吃狗粮/吃鸟粮
    }
}

class Animal1{
    public String name;
    int age;

    public Animal1() {
    }

    public Animal1(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public void eat(){
        System.out.println(name + " 正在吃...");
    }

}

class Dog1 extends Animal1 {
    public Dog1() {
    }

    public Dog1(String name,int age){
        super(name,age);
    }

    public void bark(){
        System.out.println(name + " 正在叫...");
    }

    //改注解用于检查下面的重写方法是否出错
    //快速生成重写方法ctrl+o
    @Override
    public void eat() {
        System.out.println(name + " 正在吃狗粮...");
    }


}

class Bird extends Animal1 {
    public Bird() {
    }

    public Bird(String name, int age) {
        super(name, age);
    }

    public void fly(){
        System.out.println(name + "正在飞");
    }

    public void eat(){
        System.out.println(name + " 正在吃鸟粮...");
    }
}
